package net.cyue.ort.llm.util;

import java.util.List;
import java.util.Map;

/**
 * Token管理器接口
 * 负责token的编码、解码和序列检测
 * 遵循单一职责原则，专注于token操作
 */
public interface TokenManager {
    /**
     * 将文本编码为token ID列表
     * @param text 输入文本
     * @return token ID列表
     */
    List<Long> tokenize(String text);
    
    /**
     * 将token ID列表解码为文本
     * @param tokenIds token ID列表
     * @return 解码后的文本
     */
    String detokenize(List<Long> tokenIds);
    
    /**
     * 检查是否为序列结束token
     * @param tokenId token ID
     * @return 是否为EOS token
     */
    boolean isEndOfSequence(long tokenId);
    
    /**
     * 检查token列表中是否包含序列结束token
     * @param tokenIds token ID列表
     * @return 是否包含EOS token
     */
    boolean isEndOfSequence(List<Long> tokenIds);
    
    /**
     * Tokenization结果记录
     * @param ids token ID列表
     * @param metadata 元数据
     */
    record TokenizationResult(List<Long> ids, Map<String, Object> metadata) {}
}

